/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.marcelo.agro.core.api;

import java.util.List;
import org.marcelo.agro.entidades.*;

/**
 *
 * @author marcelo
 */
public interface IProductos extends IAccesoADatos<Productos>{
    
//    public static final MatchMode START = MatchMode.START;
//    public static final MatchMode EXACT = MatchMode.EXACT;
//    public static final MatchMode ANYWHERE = MatchMode.ANYWHERE;
//    public static final MatchMode END = MatchMode.END;
        
    /**
     * Obtener una lista de productos similar a un producto dado
     * @param similar
     * @return 
     */
    
    
    public List<Productos> FindProductos(String nombre,MatchMode  matchMode, Boolean ignoreCase);
    
    /**
     * Retorna toda la lista de grupos
     * @return 
     */
    public List<Grupo> getGrupos();
    
    /**
     * Obtiene la lista de todos los fabricantes
     * @return 
     */
    public List<Fabricante> getFabricantes();
    
    /**
     * Obtiene la lista de todos los registrantes
     * @return 
     */
    public List<Registrante> getRegistrantes();
    
    /**
     * Obtiene la lista de los tipo de presentaciones
     * @return 
     */
    public List<TipoPresentacion> getTipoPresentaciones();
    
    /**
     * Permite obtener la lista de paises
     * @return 
     */
    public List<Pais> getPaises();
    
    
    public class MatchMode {
        
        public enum  MATCH_MODES {START, EXACT, ANYWARE, END};
        private MATCH_MODES matchModes;
        
        public MatchMode(MATCH_MODES matchModes) {
            this.matchModes = matchModes;
        }
                
        public org.hibernate.criterion.MatchMode getMode() {
            switch (matchModes){
                case EXACT: 
                    return org.hibernate.criterion.MatchMode.EXACT;
                case START: 
                    return org.hibernate.criterion.MatchMode.START;
                case ANYWARE: 
                    return org.hibernate.criterion.MatchMode.ANYWHERE;
                case END :
                    return org.hibernate.criterion.MatchMode.END;
                default: 
                    return org.hibernate.criterion.MatchMode.ANYWHERE;
            }
        }
        
    }
    
}
